Inhalt: Beschreibung der Module aus dem Verzeichnis SOURCE\POSIX.
        Der Text sollte vor Benutzung dieser Module gelesen werden.


Was ist POSIX?
==============
POSIX ist kein reales Betriebssystem, sondern der Versuch, die
Eigenschaften der gngigen Betriebssysteme unter einen Hut zu bringen
und zu standardisieren. Wenn POSIX auch nicht ausdrcklich speziell
auf UNIX-Systeme abzielt, so sind doch viele Dinge nicht mit anderen
Betriebssystemen machbar. Dies gilt vor allem fr die vom System zur
Verfgung zu stellenden Betriebssystem- und Bibliotheksaufrufe. Andere
Dinge, wie etwa die Hilfsprogramme ls, date usw. knnen dagegen auch
mit anderen Systemen realisiert werden. Der Standard ist in mehrere
Gebiete eingeteilt; so legt z.B. POSIX.1 die unterste Ebene mit den
Betriebsystemaufrufen fest, POSIX.2 befat sich mit der Shell, den
Utilities und einigen Bibliotheksfunktionen zu deren Untersttzung.
Es gibt aber noch diverse andere Untergruppen, die sich z.B. mit
Echtzeitprogrammierung, Netzwerken oder Anbindungen fr spezielle
Programmiersprachen beschftigen. Eine wichtige Eigenschaft des POSIX-
Standards ist die relative Unabhngigkeit der einzelnen Teilgebiete;
so knnte z.B. ein (GEM)DOS-System ohne weiteres POSIX.2 erfllen,
wenn die entsprechenden Programme vorhanden sind, whrend Kompatibilitt
zu POSIX.1 nicht machbar ist, jedenfalls nicht ohne Hilfsmittel wie
z.B. MiNT.


Was bieten die POSIX-Module?
============================
Die im Verzeichnis POSIX enthaltene Modulsammlung soll die POSIX.1-
Systemaufrufe, die bisher nur fr ``C'' (und Ada) definiert sind, auch
unter Modula-2 verfgbar machen. Insbesondere unter GEMDOS werden ja
manche Dinge vllig unterschiedlich zu *IX-Systemen, und damit auch POSIX,
gehandhabt. Ich denke da nur an das Suchen von Dateien: Unter GEMDOS
werden dazu die Betriebssystemaufrufe "Fsfirst()" und "Fsnext()" benutzt,
unter POSIX.1 dagegen wird ein Verzeichnis mit "opendir()" geffnet,
jeweils der Name der nchsten im Verzeichnis enthaltenen Datei mit
"readdir()" ermittelt, mit "fnmatch()" wird berprft, ob der Name mit
der oder den gesuchten bereinstimmt (dabei knnen die ``Wildcards'' *, ?
und [...] benutzt werden) und schlielich werden mit "stat()" alle weiteren
Informationen ber die Datei eingeholt (unter GEMDOS stehen die
vorhandenen Informationen in der DTA). Ein Beispiel fr die Ermittlung
von Dateien nach diesem Muster ist in LISTDIR.MPP enthalten, das ein
vereinfachtes ``ls'' darstellt.

Auerdem knnen Pfadnamen nach *IX-Konvention angegeben werden (z.B. /
statt \ oder /usr statt e:\usr); diese werden, soweit mglich, in
DOS-quivalente berfhrt. Fr die Lnge und das Aussehen von Pfadnamen
gibt es trotz der *IX <--> DOS-Wandlung keine Beschrnkung (auer der
Stackgre, diese mu gegebenenfalls hher als die blichen 8kB gewhlt
werden)!

Soweit von POSIX.1 gefordert, sind die Funktionen reentrant und knnen in
Signalhandlern verwendet werden.

Fr die Erklrungen der einzelnen Funktionen mssen die Definitionsmodule
herangezogen werden. I.allg. ist fr jede Funktion erstmal ein Text ber
die allg. Funktionsweise unter *IX bzw. POSIX vorhanden, und dann unter
den Stichworten GEMDOS bzw. MiNT evtl. Abweichungen davon, die durch
die Implementierung oder das unterliegende Betriebssystem bedingt sind.
Ohne MiNT (oder einer anderen Erweiterung, die die gleichen Funktionen
zur Verfgung stellt) sind die Einschrnkungen naturgem (erheblich)
grer, obwohl unter reinem TOS versucht wird, mglichst viel zu emulieren.

Fast alle POSIX.1-Systemfunktionen, d.h. auer den von Ansi-C bernommenen,
sind implementiert, zustzlich gibt es ein paar weitere gngige
*IX-Funktionen.

Folgende POSIX.1-Systemfunktionen sind (noch) nicht implementiert:
"fpathconf()", "mkfifo()"


Als Grundlage dieser Modulsammlung diente die ``C''-Bibliothek MiNTLib
von Eric R. Smith, dem Autor von MiNT; die neueren Versionen (ab pl26)
wurden und werden von mehreren anderen Leuten (auch in Richtung POSIX)
weiterentwickelt, nheres dazu ist den entsprechenden Texten der MiNTLib
zu entnehmen. Diese Bibliothek macht die speziellen Eigenschaften von MiNT,
dem GEMDOS-Multitasking-Ersatz bzw. der MultiTOS-Grundlage, auch innerhalb
der (*IX)-Standardbibliothek den gngigen Atari-C-Compilern, speziell dem
GNU-C-Compiler, zugnglich.

Abgesehen vom reinen bertragen ``C'' --> Modula-2 sind einige
Funktionen gleichgeblieben, aber bei den meisten habe ich erweitert,
verkrzt, verndert, Fehler beseitigt, Fehler hinzugefgt oder sonst
irgendwas. Bei der Modulaufteilung und der Namensgebung war ich manchmal
etwas ratlos, aber zumindest die Funktionsnamen sind, bis auf wenige
Ausnahmen, gleichgeblieben. Wer einen Compiler hat, der Unterstriche in
Bezeichnern erlaubt, und lieber die Originalnamen verwenden mchte, kann
die Module mit dem Prprozessor und der Datei C_ID.M2H bearbeiten,
die die entsprechenden Namensnderungen enthlt (siehe auch INSTALL.TXT).

Zeitweise war fr die Moduleinteilung auch ein einzelnes Modul im Gesprch,
z.B. 'SYS' oder 'POSIX', aber das wre wohl ein ziemliches Monster an
Umfang geworden; auch die Struktur der POSIX-C-Header zu bernehmen schien
mir nicht sinnvoll, da hier die Verteilung der Funktionen schlecht
geregelt wre (in 'UNISTD' stnde dann fast alles und in den anderen
Modulen, wie 'STAT', 'DIRENT' u.. jeweils nur ein paar wenige Funktionen).
Zusammengehrende Funktionen sind zwar in den jeweiligen Modulen
zusammengefat, es ist aber ein Modul POSIX1 vorhanden, in dem alle
POSIX-Funktionen, -Typen und -Konstanten als Reexport bzw.
Prozedurvariable deklariert sind, so da der Import aus einem einzigen
Modul ausreicht, ohne da ein Riesenmodul entsteht oder zustzlicher
Verwaltungsaufwand zur Laufzeit. Auf die gleiche Weise gibt es ein
Modul ANSIC, in dem Funktionen reexportiert werden, die dem ANSI-C-
Standard zuzuordnen sind und zumindest teilweise ebenfalls POSIX-1-
Funktionen sind. Das Modul POSIX2 enthlt einige Funktion aus POSIX.2
und das Modul iX reexportiert Funktionen, Typen und Konstanten, die nicht
zu POSIX gehren, aber im BSD-Unix und anderen *IX-Varianten anzutreffen
sind.

Die Verfgbarkeit der meisten neuen GEMDOS-Funktionen, die es unter MiNT
gibt, und anderen Eigenschaften, die nicht speziell durch GEMDOS-Funktionen
bereitgestellt werden, wird nicht vom Vorhandensein von MiNT abhngig
gemacht, sondern es wird entweder durch einen Aufruf dieser Funktionen
geprft ob sie untersttzt werden (Returncode ungleich -32 = EINVFN), oder
durch gewisse Annahmen die Verfgbarkeit der brigen neuen Eigenschaften
festgestellt. Damit ist die Nutzung der erweiterten Funktionalitt auch
unter anderen Betriebssystemerweiterungen mglich (z.B. MetaDOS oder
MagiC! >= 3).

Folgende Funktionen machen (noch) durch direktes Abfragen auf Vorhandensein
von MiNT oder Magic Annahmen ber Betriebssystemeigenschaften, wobei es
aber teilweise keine Mglichkeit gibt, diese universell zu gestalten, z.B.
bei den erweiterten 'Pexec'- und 'Fopen'-Modi.

Modul 'file': "open()", "lseek()"
Modul 'proc': "tfork()", "spawnv()", "spawnve()", "spawnvp()", execv()",
              "execve()", "execvp()"
Modul 'sig' : "sleep()", "usleep()"



Kurzbeschreibung der POSIX-Module
=================================
Sowohl die Aufteilung der Module auf die Verzeichnisse als auch die
Verteilung der einzelnen Funktionen auf die Module ist nicht so eng zu
sehen; einiges knnte durchaus auch anders gelst werden.

Verzeichnis C:
--------------
Enthlt im wesentlichen Module, die Funktionen des ANSI-C-Standards
(wenn ntig, an Modula-2 angepat) zur Verfgung stellen.


args
----
Gewhrleistet den Zugriff auf Kommandozeile bzw. Programmargumente und
Environment des Programms mithilfe der in ANSI-C blichen Funktionen.
Die Kommandozeile wird sowohl nach dem alten Atari-Standard (Basepage)
als auch nach dem neuen Atari-Standard (ARGV inkl. Erweiterung fr leere
Argumente) ausgewertet. Wenn nicht der neue Standard verwendet wird,
werden mehrere (``saubere'') Versuche unternommen, trotzdem den
Programmnamen zu ermitteln, der normalerweise das nullte Argument darstellt.

blk
---
Prozeduren zum schnellen Bearbeiten typenloser Speicherbereiche. Neben
den blichen, in ANSI-C enthaltenen Funktionen zum Kopieren, Fllen,
Suchen und Vergleichen, gibt es auch zwei Funktionen zum Anlegen und
Freigeben von Speicher auf dem Stack. Dies entspricht ungefhr der
Verwendung von "alloca()" in ``C'' und luft sehr schnell ab, da
lediglich der Stackpointer manipuliert wird. So kann zur Laufzeit
kurzzeitig dynamisch Speicher angefordert werden. Bei den POSIX-Modulen
werden die Funktionen dazu verwendet, den Speicher zu beschaffen, der
fr die Umwandlung zwischen UNIX- in DOS-Pfadnamen bentigt wird, ohne da
dabei eine Begrenzung der Pfadlnge beachtet werden mu.
Die Prozeduren dieses Moduls sind in Assembler geschrieben.

ctype
-----
Die ANSI-C-Funktionen fr die Klassifizierung von Zeichen (Ist-Buchstabe,
Ist-Ziffer usw.). Die Funktionen sind in zwei Versionen vorhanden, die
sich in der Zuordnung der Zeichen zu den jeweiligen Klassen unterscheiden:
Bei den mit einem groen 'C' beginnenden Funktionen ist diese Zuordnung
fest einprogrammiert und entspricht den amerikanischen und damit den in
``C'' gngigen Konventionen. Bei den anderen Funktionen kann diese
Zuordnung jedoch durch das aktive LC_CTYPE-Locale (-> Modul 'loc') den
nationalen Besonderheiten (z.B. Umlaute) angepat werden.

str
---
Prozeduren fr Strings nach ``C''-Konvention, d.h. reprsentiert durch
einen Zeiger auf das erste Zeichen und abgeschlossen mit einem Nullbyte.
Es sind die meisten der ANSI-C-Funktionen enthalten, und zustzlich
noch Konvertierungsroutinen zwischen C- und M2-Strings.

lib
---
Unterschiedliche Funktionen, z.T. ANSI-C. Unter anderem Sortieren,
Suchen, Wandlung zwischen ganzen Zahlen und Strings und Zufallszahlen.

mem
---
Dynamische Speicherverwaltung mit den ``C''-blichen Funktionen "malloc()"
etc. Besonderheiten: Es wird auch Speicher an das Betriebssystem
zurckgegeben und die Speicherverwaltung ist ``Thread-fest''
(-> THREADS.TXT).

ANSIC
-----
Das ist ein Reexportmodul, das lediglich die Bezeichner, die im
ANSI-C-Standard enthalten sind, aus den oben genannten und weiteren
Modulen zusammenfat.



Verzeichnis IX:
---------------
Enthlt im wesentlichen Module, die Funktionen fr System- und
Bibliotheksaufrufe von UNIX-Systemen, speziell aber Funktionen des
POSIX.1-Standards zur Verfgung stellen. Dies sind die eigentlichen
Hauptmodule fr den Benutzer (Programmierer). Wo immer mglich, wird
versucht, die Fhigkeiten der neuen GEMDOS-Funktionen, wie sie von MiNT
eingefhrt wurden, auch mit dem normalen TOS zu erreichen.


types
-----
Stellt grundlegende Typen und Konstanten zur Verfgung; sowohl zu POSIX
gehrende als auch ``C''-Standardtypen.

er
--
Enthlt die globale Fehlervariable 'errno' und Konstanten, fr die
Werte, die diese Variable annehmen kann.

jump
----
Die in ANSI-C blichen Funktionen fr kontrollierte globale Sprnge und
deren in POSIX erweiterte Varianten fr den Einsatz in Signalhandlern.
Die Funktionen werden in den Testmodulen 'tlib' und 'tsighandler'
verwendet.

loc
---
Ermglicht das Setzen und Abfragen des ``Locales'' fr bestimmte Funktionen
der POSIX-Module. D.h. die Funktionen knnen in beschrnktem Umfang an
nationale Gegebenheiten angepat werden. Dies betrifft die
Klassifizierungsoperationen aus 'ctype', die Zeit- und Datumsfunktionen
aus 'tim' und die Umsetzung von Fehlercodes in Klartext mit Funktionen
aus 'str'.
Locales werden in den Testmodulen 'ShowDate' und 'ShowLoc' verwendet.

Socket
------
Zugriff auf die Netzwerkfunktionen des `MiNT-net' von Kay Rmer mittels
der elementaren, UNIX-kompatiblen `Socket'-Operationen.

sys
---
Ermitteln und Setzen systemspezifischer Werte. Hierunter fallen
z.B. die Uhrzeit, die Passwortdateien oder das Ermitteln der
POSIX-Mindestwerte.
Einige der Funktionen werden im Testmodul 'tsys' demonstriert.

proc
----
Ermitteln und Setzen prozespezifischer Werte. Das betrifft vor allem die
diversen Kennungen, das Erzeugen neuer Prozesse und das Warten auf deren
Ende und die Verwaltung des aktuellen Verzeichnisses.
Einige dieser Funktionen werden in den Testmodulen 'Spawn', 'ForkExec'
und 'ShowIDs' demonstriert.

sig
---
Alles mgliche, das mit der Signalverarbeitung zu tun hat. Das wichtigste
ist natrlich das Installieren von Signalhandlern und Senden von Signalen.
Daneben gibt es noch Funktionen zur Manipulation der Prozemaske, das
Deaktivieren des Prozesses bis ein bestimmtes Signal auftritt oder das
Senden von Signalen nach einer bestimmten Zeitdauer whrend der Proze
inzwischen weiterluft.
Einige dieser Funktionen werden in den Testmodulen 'ShowSig', 'tsighandler'
und 'tsigtime' demonstriert.

tim
---
Funktionen zur Aufschlsselung der einzelnen Komponenten des UNIX-
Zeitformats und zur Konvertierung in einen String. Dabei werden auch
Zeitzonen und Sommer/Winterzeit bercksichtigt. Die Informationen
hierber werden der Environmentvariable TZ entnommen, deren Format im
Definitionsmodul erlutert wird. Existiert diese Variable nicht, werden
Defaultwerte fr Deutschland bzw. USA verwendet.
Zeitfunktionen werden im Testprogramm 'ShowDate' verwendet.

dir
---
Anlegen und Lschen von Dateiverzeichnissen und (symbolischen) Links,
Umbenennen von Dateien, Abfragen und Verndern von Dateiattributen und vor
allem das Ermitteln der Dateien eines Verzeichnisses.
Das Auflisten von Dateiverzeichnissen wird in 'ListDir' demonstriert.

file
----
Alle Funktionen dieses Moduls arbeiten mit den Kennungen geffneter Dateien.
Es gibt Funktionen zum ffnen und Schlieen, Lesen und Schreiben (wobei auch
Terminalattribute beachtet werden) von Dateien, Funktionen zur Manipulation
der Dateikennungen.

term
----
Die Funktionen dieses Moduls kontrollieren die Attribute spezieller
Dateien, die als Terminal verwendbar sind. Z.T. werden direkt Hardware-
eigenschaften festgelegt, wie das Senden eines ``Breaks'', normalerweise
sind aber die wichtigsten Eigenschaften, die festgelegt werden knnen, das
(De)Aktivieren des Echos, das Interpretieren von Kontrollzeichen, Zeilen-
oder Einzelzeichenmodus usw.

POSIX2
------
Enthlt einige Funktionen des POSIX.2-Standards. Dazu gehren das
Vergleichen von Dateinamen mit Wildcards, das Absetzen von Systemaufrufen
ber eine Shell und das Analysieren von Kommandozeilenoptionen.

POSIX1
------
Das ist ein Reexportmodul, das lediglich die Bezeichner, die im
POSIX.1-Standard enthalten sind, aus den oben genannten Modulen
zusammenfat.

fcrypt
------
Das Modul enthlt die Funktion "crypt()" zur Passwortverschlsselung.

iX
--
Das ist ein Reexportmodul, das lediglich die Bezeichner aus den oben
genannten Modulen zusammenfat, die nicht zum POSIX.1-Standard
gehren.



Verzeichnis SUPPORT:
--------------------
Enthlt im wesentlichen Module, die fr die Implementierung der Module
aus den anderen Verzeichnissen ntig sind. Einige der Module knnen
jedoch auch allgemein verwendet werden.


PORTAB
------
Einheitliche Namen fr wichtige Typen und Konstanten mit festgelegten
Eigenschaften, z.B. UNSIGNEDLONG fr 32-Bit-Ganzzahlen ohne Vorzeichen
oder NULL fr eine ADDRESS-Konstante, die nur aus Nullbits besteht.
Das Modul stammt aus Ulrich Kaisers GEM-Bibliothek ``crystal''.

pSTORAGE
--------
Dynamische Speicheranforderung und -freigabe mit ALLOCATE und DEALLOCATE.
Das Modul bietet eine einheitliche Schnittstelle fr die oftmals
unterschiedlichen Aufrufe der einzelnen Systeme, wird jedoch in M2LIB
nicht mehr verwendet. In Anwendungsprogrammen sollte 'mem' oder 'ISOStorage'
verwendet werden.
Das Modul stammt aus Ulrich Kaisers GEM-Bibliothek ``crystal''.

pLONGSET
--------
Die gngigsten Operationen fr Mengen, bei denen die einzelnen Elemente
in festgelegter Reihenfolge auf die Bits eines 32-Bit-Langwortes abgebildet
sind.

pOUT
----
Prozeduren fr die Ausgabe von 32-Bit-Ganzzahlen und Realzahlen ber 'InOut'
und Konsorten. Das Modul bietet eine einheitliche Schnittstelle fr die bei
den meisten Systemen unterschiedlichen Aufrufe. Die Prozeduren sind lediglich
fr die Testmodule gedacht, in Anwendungsprogrammen sollten die
entsprechenden ISO-Module verwendet werden.

OSCALLS
-------
Minimalschnittstelle fr Betriebssystemaufrufe. Enthaelt alle BIOS- und
GEMDOS-Aufrufe.

LC*
---
Diese Module implementieren die Locales fr die jeweiligen Nationalitten.
Sie sind lediglich fr die Implementierung der POSIX-Module ntig,
die Verwendung auerhalb ist nicht sinnvoll.

DosDir
------
Konvertierung zwischen UNIX- und DOS-Dateinamen, Analyse von Pfadnamen,
Suchen von Dateien usw.

DosFile
-------
Untersttzung fr Terminalfunktionen.

DosText
------
Primitive Operationen fr das Lesen von (zeilenorientierten) Textdateien,
was fr die Analyse von Konfigurationsdateien wie /etc/passwd und /etc/group
benutzt wird.

DosTime
-------
Konvertierung zwischen UNIX- und DOS-Datumsformat.

DosSystem
---------
Allgemein verwendbares Modul fr Dinge, die auf ``unterer'
(Betriebssystem)Ebene liegen: Abfragen verschiedener Versionsnummern,
Feststellen der vorhandenen Hardware, Routinen fr den Cookiejar, Lesen
und Schreiben von Systemvariablen usw. und die Modulterminierung.

DosIO
-----
Die wichtigsten Ein/Ausgaberoutinen nach InOut-Muster fr GEMDOS-
Standardein- und ausgabe.


Auerdem befinden sich noch die Module 'ISOStrings' und 'StringsX' in
diesem Verzeichnis. Die Module gehren eigentlich in's ISO-Verzeichnis,
stehen aber hier, da sie auch von den POSIX-Modulen importiert werden
und deswegen auch entsprechend frh bersetzt werden mssen.


Literatur
=========

o Zlotnick, F. "The POSIX.1 Standard: A Programmer's Guide." The
  Benjamin/Cummings Publishing Company, Redwood City, California, 1991

o POSIX.2-Standard. IEEE P1003.2 Draft 11.2, ISO/IEC CD 9945-2.2

o Diverse *IX-man-pages

o Quelltexte der MiNTLib, GNULib und glibc (die ``echte'' GNULib)

o Kernighan, Brian W., Ritchie, Dennis M.: Programmieren in C,
  Zweite Ausgabe ANSI C, Carl Hanser Verlag, Mnchen, 1990
